#include <stdio.h>
#ifdef WIN32
#include <curses.h>
#else
#include <curses.h>
#endif

#include <assert.h>
#include <time.h>
#include "src/Jeu.h"

void ncursAff( WINDOW* win, const Jeu *Jeu)
{
	int x,y;

	Terrain *Ter = jeuGetCstTerrainPtr(Jeu);
	const Perso *Per = jeuGetCstPersoPtr(Jeu);

	wclear(win);

	for(y=0;y<Ter->dimY;++y)
		for(x=0;x<Ter->dimX;++x)
			mvwprintw( win, y, x, "%c",terrainGetCharCoord(Ter,y,x) );


	mvwprintw( win, getCoordYPerso(Per), getCoordXPerso(Per), "*");
	mvwprintw( win, getCoordYZombie(Jeu->tab_Zomb), getCoordXZombie(Jeu->tab_Zomb), "@");
	zoneDeMort (Jeu->pers);


	wmove( win, getCoordXPerso(Per), getCoordXPerso(Per));
}

void ncursBoucle(Jeu *Jeu)
{
    printf("là 3-1\n");
	WINDOW *win, *screen;
	int c;
	int continue_boucle;
	const Terrain *Ter = jeuGetCstTerrainPtr(Jeu);
	printf("là 3-2\n");
	printf(" %d \n", Ter->dimX);

	 /* Horloges (en secondes) */
    float horloge_courante, horloge_precedente;

    /* Intervalle de temps (en secondes) entre deux évolutions du jeu */
    /* Changer la valeur pour ralentir ou accélérer le déplacement des fantomes */
    float intervalle_horloge = 1.0f;
    printf("là 3-3\n");

	screen = initscr();		/* passe l'écran texte en mode NCurses */
	clear();		/* efface l'écran */
	noecho();  	/* Lorsqu'une touche est préssée au clavier, elle n'apparait pasa à l'écran */
	cbreak();		/* un caractère est directement affiché, il ne passe pas dans un buffer */



	/* Creation d'une nouvelle fenetre en mode texte */
	/* => fenetre de dimension et position ( WIDTH, HEIGHT, STARTX,STARTY) */
	win = newwin( Ter->dimY, Ter->dimX, 2, 2 );

	keypad(win, TRUE);		/* pour que les flèches soient traitées (il faut le faire après création de la fenêtre) */

	//halfdelay(temps_dizieme);

	/* notimeout(win,true); */
	/* wtimeout( win, 500 ); */
//nodelay(win,true); /* Pour que l'appel à wgetch soit non-bloquant */
//    mvwprintw( win, 4, 4, "lol");
	continue_boucle = 1;

	/* Récupère l'horloge actuelle et la convertit en secondes */
    /* clock() retourne le nombre de tops horloge depuis le lancement du programme */
    horloge_precedente = (float)clock()/(float)CLOCKS_PER_SEC;

    ncursAff( win, Jeu);

	do
	{
        /* Récupère l'horloge actuelle et la convertit en secondes */
        /* clock() retourne le nombre de tops horloge depuis le lancement du programme */
        horloge_courante = (float)clock()/(float)CLOCKS_PER_SEC;

        if (horloge_courante-horloge_precedente>=intervalle_horloge)
        {
                jeuEvolue(Jeu);
                ncursAff( win, Jeu);
                horloge_precedente = horloge_courante;
                  char col[15]=  {"#...###..##...#"};
	defilementTerrain (Jeu, col);
        }


		c = wgetch(win);
		/* jeuActionClavier( jeu, 'd'); */
		switch(c)
		{
			case KEY_LEFT:
				jeuActionClavier( Jeu, 'g');
				ncursAff( win, Jeu);
				break;
			case KEY_RIGHT:
				jeuActionClavier( Jeu, 'd');
				ncursAff( win, Jeu);
				break;
			case KEY_UP:
				jeuActionClavier( Jeu, 'h');
				ncursAff( win, Jeu);
				break;
			case KEY_DOWN:
				jeuActionClavier( Jeu, 'b');
				ncursAff( win, Jeu);
				break;
			case 27: /* ECHAP */
				continue_boucle = 0;
				break;
		}
	} while (continue_boucle==1);

    assert(delwin(win)!=ERR);
    assert(delwin(screen)!=ERR);

	endwin();
switch (c)
		{case 'g' :
				deplacementPersoGauche(Jeu->pers, Jeu->ter);
				break;
		case 'd' :
				deplacementPersoDroite(Jeu->pers,Jeu->ter);
				break;
		case 'h' :
				deplacementPersoHaut(Jeu->pers,Jeu->ter);
				break;
		case 'b' :
				deplacementPersoBas(Jeu->pers,Jeu->ter);
				break;
		}
}
